/**
 * 
 * 
 */
package fr.uniscol;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import fr.uniscol.model.BaseAnneeScolaire;
import fr.uniscol.model.Classe;
import fr.uniscol.model.IUniscolUser;
import fr.uniscol.mvc.SessionExpireeException;
import fr.uniscol.service.IClasseService;
import fr.uniscol.service.IEleveService;

@Controller
public class ClasseController extends UniscolMainController {
	
    @Autowired
    private IClasseService classeService;

    @Autowired
    private IEleveService eleveService;

    @ModelAttribute("menuContextuel")
    public String getMenuContextuel() throws Exception{
        return  "menus/menu_classes";
    }
    
    @ModelAttribute("classes")
    public List<Classe> getAllClasses(HttpSession session){

        BaseAnneeScolaire base = getUtilisateur(session).getBaseSelectionnee();

        return classeService.getAllClassesOfEtablissement(base);
    }

    @RequestMapping("/classes")
    public String list(){
        return "classes";
    }
    
    @RequestMapping("/classe.create")
    public ModelAndView create(HttpSession session){
        
        Classe classe = new Classe();
        
        return new ModelAndView("classe", "classe", classe);
    }

    @RequestMapping(value="/classe.edit")
    public ModelAndView edit(@RequestParam("classeid") int classeId, HttpSession session){

        Classe classe = classeService.getClasseById(classeId);

        // Liste des eleves
        classe.setEleves(eleveService.getAllElevesOfClasse(classe));

        return new ModelAndView("classe", "classe", classe);
    }

    @RequestMapping(value="/classe.save", method=RequestMethod.POST)
    public String saveClasse(@ModelAttribute Classe model, BindingResult results, HttpSession session){

        model.setBase(getUtilisateur(session).getBaseSelectionnee());
        
        Classe classe = classeService.saveClasse(model);
        if(classe != null){
            alertSuccess("classe.save.ok", "La classe a été enregistrée avec succès", session);
        }else{
            alertError("classe.save.nok", "La classe n'a pas été enregistrée", session);
        }
        
        return "redirect:classe.edit?classeid=" + model.getId();
    }
    
    @RequestMapping("/classe.delete")
    public String deleteClasse(@RequestParam("classeid") long classeId, HttpSession session){
        
        Classe classe = new Classe();
        classe.setId(classeId);
        
        if(classeService.deleteClasse(classe)){
            alertSuccess("classe.delete.ok", "La classe a été supprimée avec succès", session);
        }else{
            alertSuccess("classe.delete.nok", "La classe n'a pas été supprimée", session);
        }
        
        return "redirect:classes";
    }
}
